#pragma once
#include <cstdarg>
#include <cstddef>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<string>
#include<string.h>

#define DEBUG 0
#define NORMAL 1
#define WARNING 2
#define FATAL 3

const char* gLevelMap[]={
    "DEBUG",
    "NORMAL",
    "WARNING",
    "FATAL"
};

// void logMessage2(int level,const char* format,...)
// {
//     if(level==DEBUG){
//         return;
//     }
//     char stdbuffer[1024];
//     time_t timestamp=time(nullptr);
//     snprintf(stdbuffer,sizeof(stdbuffer),"[%s][%ld]",
//     gLevelMap[level],timestamp);
//     va_list args;
//     va_start(args, format);
//     char logbuffer[1024];
//     //以一种固定的格式将参数给打印出来
//     vsnprintf(logbuffer,sizeof(logbuffer),
//      format, args);
//      printf("%s %s",stdbuffer,logbuffer);
//      va_end(args);
// }
void logMessage(int level,const char* format,...)
{
    if(level==DEBUG){
        return ;
    }
    char stdbuffer[1024];
    time_t timestamp=time(nullptr);
    snprintf(stdbuffer,sizeof(stdbuffer),
    "[%s] [%ld]",gLevelMap[level],timestamp);
    char logbuffer[1024];
    va_list args;
    va_start(args, format);
    vsnprintf(logbuffer, sizeof(logbuffer),
    format,args);
    va_end(args);
    printf("%s-%s\n",stdbuffer,logbuffer);

}
// void logMessage2(int level,const char* format)
// {
//     if(level==DEBUG){return ;}
//     char stdbuffer[1024];
//     time_t timestamp=time(nullptr);
//     snprintf(stdbuffer,sizeof(stdbuffer),"[%s] [%ld]",
//     gLevelMap[level],timestamp);
//     char logbuffer[1024];
//     va_list args;
//     va_start(args, format);
//     vsnprintf(logbuffer, sizeof(logbuffer), 
//     format, args);

// }
// void logMessage5(int level,const char* format)
// {
//     if(level==DEBUG){return ;}
//     char stdbuffer[1024];
//     time_t timestamp=time(nullptr);
//     snprintf(stdbuffer,sizeof(stdbuffer),"[%s] [%ld]",
//     stdbuffer,timestamp);
//     char logbuffer[1024];
//     va_list args;
//     va_start(args, format);
//     vsnprintf(logbuffer, sizeof(logbuffer),
//      format, args);
//      printf("%s-%s\n",stdbuffer,logbuffer);
// }
// void logMessage3(int level,const char* format)
// {
//     if(level==DEBUG){
//         return ;
//     }
//     char stdbuffer[1024];
//     time_t timestamp=time(nullptr);
//     snprintf(stdbuffer,sizeof(stdbuffer),"[%s] [%ld]",
//     stdbuffer,timestamp);
//     char logbuffer[1024];
//     va_list args;
//     va_start(args, format);
//     vsnprintf(logbuffer, sizeof(logbuffer), 
//     format, args);
//     printf("%s %s\n",stdbuffer,logbuffer);
// }
// void logMessage(int level,const char* format)
// {
//     if(level==DEBUG){
//         return;
//     }
//     char stdbuffer[1024];
//     time_t timestamp=time(nullptr);
//     snprintf(stdbuffer,sizeof(stdbuffer),"[%s] [%ld]",
//     gLevelMap[level],timestamp);
//     char logbuffer[1024];
//     va_list args;
//     va_start(args, format);
//     //这个函数是会根据format当中的占位符来从args读取相应的参数
//     vsnprintf(logbuffer,sizeof(logbuffer),
//      format,args);
//      va_end(args);
//      printf("%s%s\n",stdbuffer,logbuffer);
// }